<?php
/**
 * @package   auto_occasion
 * @subpackage 
 * @author    CMS
 * @copyright 2011
 * @license    All rights reserved
 */
require_once(LIB_PATH.'phpMailer/class.phpmailer.php');
include(LIB_PATH.'geoloc/ip2locationlite.class.php');


/**
 * 
 *
 */
class vendeurSrv {


    /**
     * Fonction permettant de formater le tel du vendeur
     * @return string
     *
     */
    public static function formatTel($tel) {
        
        $tab    = str_split($tel);
        $k      = 0;
        $newTel = "";
        if (sizeof($tab)) {
            foreach ($tab as $item) {
                if ($item != "") {
                    
                    $newTel .= $sep . $item;
                    $sep = ($k%2) ? " " : "";
                    $k++;
                }
            }

        }

        return $newTel;

    }
    /**
     * Fonction permettant de verifeir si le mail du vendeur existe
     * @return boolean true if exists false if not
     *
     */
    public static function checkMail ($_mail) {
        $sql  = " SELECT Occas_NumImmatricul, Vendeur_Naissance, Vendeur_Nom, Vendeur_Email FROM ao_vendeur";
        $sql .= " INNER JOIN ao_voiture_occasion on Occas_Vendeur = IdVendeur ";
        $sql .= " WHERE Vendeur_Email = '" . $_mail . "'";
        $sql .= " LIMIT 1";

        $jdb        = jDb::getDbWidget();
        $result     = $jdb->fetchAll($sql);

        return (sizeof($result))? $result[0] : array();

    }

    /**
     * Fonction permettant de récupérer un vendeur par son annonce id
     * @return array
     *
     */
    public static function getVendeurByIdOccasion ($id) {
        $sql  = " SELECT Occas_NumImmatricul, DATE_FORMAT(Vendeur_Naissance, '%d/%m/%Y') AS Vendeur_Naissance, Vendeur_Nom, Vendeur_Email FROM ao_vendeur";
        $sql .= " INNER JOIN ao_voiture_occasion on Occas_Vendeur = IdVendeur ";
        $sql .= " WHERE IdOccasion = " . $id;
        $sql .= " LIMIT 1";

        $jdb        = jDb::getDbWidget();
        $result     = $jdb->fetchAll($sql);

        return (sizeof($result))? $result[0] : array();

    }


    /**
     * Envoi de mail au vendeur
     *
     */
     public static function sendMail($datas) {
        $mail = new PHPmailer();
        $mail->IsSMTP();
        $mail->IsHtml(true);
        $mail->AddAddress($datas->Vendeur_Email);
        $mail->Host         = $GLOBALS['gJConfig']->mailer['smtpHost'];
        $mail->Port         = $GLOBALS['gJConfig']->mailer['smtpPort'];
        $mail->Username     = 'Auto Occasion';
        $mail->From         = $GLOBALS['gJConfig']->mailer['webmasterEmail'];
        $mail->FromName     = 'Auto - occasion';
        $mail->Subject      = 'Auto Occasion : Identifiants de connexion';
    
        $mail->Body         = $datas->message ;
        
        if (!$mail->Send()){
          echo $mail->ErrorInfo;
          die('Sending mail - Error');
        }
        
        $mail->SmtpClose();
        $mail->ClearAddresses();
        unset($mail);
        
     }
     
     /*
      * Liste des pièces auto par marque
      */
     public static function getPiecesByMarque () {
        $sql  = " SELECT P_marque FROM ao_piece_occasion GROUP BY P_marque ORDER BY P_marque";
        $jdb        = jDb::getDbWidget();
        
        return  $jdb->fetchAll($sql);

    }
    
    
     /*
      * Liste des pièces auto par marque selectionnée
      * @param String marque
      * @return Array listePieces
      */
     public static function getAllPiecesByMarque ($marque, $_iDebutListe, $modele = '', $pieceSelected = '', $_iParPage = 20, $tri = 0) {
        $modeles                = array();
        $pieces                 = array();
        
        $sql  = "SELECT APO.idPiece,
                    APO.P_departement,
                    APO.P_piece,
                    APO.P_cylindree,
                    APO.P_finition,
                    APO.P_categoriePiece,
                    APO.P_prix,
                    APO.P_marque,
                    APO.P_modele,
                    APO.P_annee
                    FROM ao_piece_occasion APO
                    WHERE  APO.P_marque = '".addslashes($marque)."'";	
        if($modele !== '')          $sql .= "   AND APO.P_modele = '".$modele."'";
        if($pieceSelected !== '')   $sql .= "   AND APO.P_piece = '".addslashes($pieceSelected)."'";
        switch ($tri) {
            case 1:
                $sql .= " ORDER BY P_departement ASC";
                break;
            case 2:
                $sql .= " ORDER BY P_departement DESC";
                break;
            case 3:
                $sql .= " ORDER BY P_marque ASC";
                break;
            case 4:
                $sql .= " ORDER BY P_marque DESC";
                break;
            case 5:
                $sql .= " ORDER BY P_modele ASC";
                break;
            case 6:
                $sql .= " ORDER BY P_modele DESC";
                break;
            case 7:
                $sql .= " ORDER BY P_cylindree ASC";
                break;
            case 8:
                $sql .= " ORDER BY P_cylindree DESC";
                break;
            case 9:
                $sql .= " ORDER BY P_piece ASC";
                break;
            case 10:
                $sql .= " ORDER BY P_piece DESC";
                break;
            case 11:
                $sql .= " ORDER BY P_prix ASC";
                break;
            case 12:
                $sql .= " ORDER BY P_prix DESC";
                break;

            default:
                break;
        }
        
        $jdb  = jDb::getDbWidget();
        
        $tResult['pieces']      = $jdb->fetchAll($sql);
        $iSize                  = sizeof($tResult['pieces']);
        
        if($modele !== ''){
            foreach ($tResult['pieces'] as $key => $value) {
                $pieces[] = $value->P_piece;
            }
            $pieces        = array_unique($pieces);
        } else {
             foreach ($tResult['pieces'] as $key => $value) {
                $modeles[] = $value->P_modele;
            }
            $modeles        = array_unique($modeles);
        }
        $tResult['modeles']         = $modeles;
        $tResult['piecesParModele'] = $pieces;
        $tResult['pieces']          = array_slice($tResult['pieces'], $_iDebutListe, $_iParPage);
        $tResult['nbRecords']       = $iSize;
        return  $tResult;

    }
    
    /*
     * Recuperer ville du vendeur
     * @param string ip
     * @return array 
     */
    public static function getVendeurCoordsByIP($ip){
        // depuis http://ipinfodb.com/ip_location_api.php
        // http://whatismyipaddress.com/ip-lookup
        $ipLite = new ip2location_lite;
        $ipLite->setKey(IP2LOCATION_KEY);

        //Get errors and locations
        $locations = $ipLite->getCity($ip);
        $errors = $ipLite->getError();

        //Getting the result
        if (!empty($locations) && is_array($locations)) {
            return $locations;
        }
        return null;        
    }
    
    
    /*
     * Calculer prix haut-moyenne-basse
     * Calculer km haut-moyenne-basse
     * @param stdClass voiture
     * @return stdClass
     */
    public static  function calculMoyenne($voiture){
        $jdb        = jDb::getDbWidget();
        
        //resultat
        $moyenne = new stdClass();
        $moyenne->prixHaut = 0;
        $moyenne->prixBas  = 0;
        $moyenne->kmHaut   = 0;
        $moyenne->kmBas    = 0;
        $moyenne->prixMoyen = 0;
        $moyenne->kmMoyen = 0;
        $moyenne->pmc = 0;
         
        // recherche annonces meme caracteristiques
        $queryCompar = "SELECT IdOccasion, Occas_Marque, Occas_Modele, Occas_Carburation, Occas_Millesime, Occas_Prix, Occas_Kilometrage
					FROM ao_voiture_occasion
					WHERE Occas_Marque = $voiture->Occas_Marque
					AND Occas_Modele = $voiture->Occas_Modele
					AND Occas_Groupe = $voiture->Occas_Groupe 
					AND Occas_Carburation = $voiture->Occas_Carburation";
        if ($voiture->Occas_Millesime) 
            $queryCompar .= " AND Occas_Millesime = $voiture->Occas_Millesime ";
        $queryCompar .= " AND Occas_Valide = '1' ORDER by IdOccasion";
        $resultCompar = $jdb->fetchAll($queryCompar);
        $nbCompar = sizeof($resultCompar);
        if ($nbCompar){
            
            //initialisation des variables
            $Somme_Prix = 0;
            $Somme_Km = 0 ;
            $tabPrix = array() ;
            $tabKm = array() ;
            foreach ($resultCompar as $key => $value) {
                $tabPrix[] = $value->Occas_Prix;
                $tabKm[] = $value->Occas_Kilometrage;
                // Mise en forme des resultats de la recherche	
                $Somme_Prix += $value->Occas_Prix;
                $Somme_Km += $value->Occas_Kilometrage;
            }
            // Prix 
                $Prix_Moyen = $Somme_Prix / $nbCompar;
                $Prix_Limite_Basse = $Prix_Moyen * 0.75;
                $Prix_Limite_Haute = $Prix_Moyen * 1.25;
                $Prix_Limite_Basse = round($Prix_Limite_Basse,0);
                $Prix_Limite_Haute = round($Prix_Limite_Haute,0);
            // Km
                $Km_Moyen = $Somme_Km / $nbCompar;
                $Km_Limite_Basse = $Km_Moyen * 0.75;
                $Km_Limite_Haute = $Km_Moyen * 1.25;
                $Km_Limite_Basse = round($Km_Limite_Basse,0);
                $Km_Limite_Haute = round($Km_Limite_Haute,0);	
                
            //resultat
            
            $moyenne->prixHaut = max($tabPrix);
            $moyenne->prixBas  = min($tabPrix);
            $moyenne->kmHaut   = max($tabKm);
            $moyenne->kmBas    = min($tabKm);
            
            //resultat : prix moyen
            if( ($voiture->Occas_Prix >= $Prix_Limite_Basse) && ($voiture->Occas_Prix <= $Prix_Limite_Haute) ){
                $moyenne->prixMoyen =  '<span class="vert">Moyen. : ' . round($Prix_Moyen, 0) . ' €</span>'; 
			}else{
				$moyenne->prixMoyen =  '<span class="red">Moyen. : ' . round($Prix_Moyen, 0) . ' €</span>'; 
			}		
			$moyenne->prixMoyen .=  ' ('.$nbCompar.' PA)';	
            
            // resultat : km moyen
            if( ($voiture->Occas_Kilometrage >= $Km_Limite_Basse) && ($voiture->Occas_Kilometrage <= $Km_Limite_Haute) ){
                $moyenne->kmMoyen =  '<span class="vert">Moyen. : ' . round($Km_Moyen, 0) . ' km</span>'; 
			}else{
				$moyenne->kmMoyen =  '<span class="red">Moyen. : ' . round($Km_Moyen, 0) . ' km</span>'; 
			}		
			$moyenne->kmMoyen .=  ' ('.$nbCompar.' PA)';
            
            //prix moyenne corrigé
            $moyenne->pmc = self::moyenne_propre($tabPrix, 0);
        }
        return $moyenne;
   }
        
    /*
     *  Elimine les extremes pour calcul
     *  (fonction reprise de l'ancien site)
     *  
     */
    public static function moyenne_propre($tab_prix, $ecart = 0.5){
        sort($tab_prix);

        $milieu = floor(count($tab_prix) / 2);
        $bInf = true;
        $bSup = true;

        $moyenne = $tab_prix[$milieu];
        $elts = 1;

        for($i = 1; $bInf || $bSup; $i++)
        {
            if(isset($tab_prix[$milieu-$i]))
            {
                $ecart_calc = (($moyenne/$elts)/$tab_prix[$milieu-$i])-1;

                //echo "moy : ".($moyenne/$elts). ", prix : ".$tab_prix[$milieu-$i].", ecart : ".$ecart_calc."<br/>";

                if($ecart_calc < $ecart)
                {
                    $moyenne += $tab_prix[$milieu-$i];
                    $elts++;
                }
                else
                {
                    //echo $tab_prix[$milieu-$i] . " est trop �loign� de la moyenne<br />";
                }
            }
            else
            {
                $bInf = false;
            }


            if(isset($tab_prix[$milieu+$i]))
            {
                $ecart_calc = ($tab_prix[$milieu+$i]/($moyenne/$elts))-1;

                //echo "moy : ".($moyenne/$elts). ", prix : ".$tab_prix[$milieu+$i].", ecart : ".$ecart_calc."<br/>";

                if($ecart_calc < $ecart)
                {
                    $moyenne += $tab_prix[$milieu+$i];
                    $elts++;
                }
                else
                {
                    //echo $tab_prix[$milieu+$i] . " est trop �loign� de la moyenne<br />";
                }
            }
            else
            {
                $bSup = false;
            }
        }

        return $moyenne / $elts++;
    }
        
    


}